//引入加载
import { Indicator } from 'mint-ui';
//引入axios 用于请求跨域资源
import axios from 'axios'
//需要用到vuex中的state中的token 进行是否登录的验证
import store from '@/store'
//需要用到路由跳转 进行登陆验证
import router from '@/router'

import { Toast } from 'vant';

export default {
    common: {
        method: 'GET',
        data: {},
        params: {},
        headers: {}
    },
    $axios(options = {}) {
        options.method = options.method || this.common.method
        options.data = options.data || this.common.data
        options.params = options.params || this.common.params
        options.headers = options.headers || this.common.headers

        //请求前显示加载中
        //加载动画
        Indicator.open('加载中...');

        // 是否是登录状态
        if (options.headers.token) { //证明该请求需要验证
            options.headers.token = store.state.user.token
            if (!options.headers.token) {
                Toast('请先登录！')
                return setTimeout(() => { router.push('/login') }, 1000)
            }
        }



        return axios(options).then(v => {
            let data = v.data.data;

            //判断如果后端传递给前端的信息为=>登录状态已过期 code:1000 
            if (data.code == 1000) {
                //结束加载动画
                Indicator.close()
                Toast('登录状态已过期，请重新登录！')
                return setTimeout(() => { router.push('/login') }, 1000)


            }


            //因为axios请求接口返回的是一个promise对象 所以要new Promise v相当于接口中拿到的数据返回的值
            return new Promise((res, rej) => {
                // 如果数据不存在 也就是！v promise中reject参数 代表返回一个代表拒绝的参数
                if (!v) return rej();
                setTimeout(() => {
                    //结束加载动画
                    Indicator.close()
                }, 200)
                res(data)
            })
        })

    }
}

//使用方法
//引入名称.$axios({
//     url:''/xxx,
//     data:{},
//     params:{},
//     method:"post"
// })